[t:/]$ 지식_

go 슬라이스 구조

2020/06/24

앞에서 삽질 한 바 있지만..

슬라이스, 즉 예를 들어 []byte를 C의 포인터처럼 생각하면 안 된다. 슬라이스는 메타를 갖고 있어서 일단 정의하면 포인터, 길이, 용량의 24바이트를 먹고 있다.

C에서 포인터로 돌아다녀야 할 파라미터가 go에서는 []byte로 돌아다니는 걸 볼 수 있는데 이 때 이것을 포인터처럼 해석하면 십중팔구 죽는다. 메타가 있기 때문이다.

unsafe로 슬라이스 -> 슬라이스로 형변환 하는 것은 괜찮다. 둘 다 메타 공간이 있기 때문이다. 그런데 구조체 포인터의 배열 -> 슬라이스로 형변환 할 때는 주의해야 한다. 메타가 첫번째 구조체를 훼손시킨다.





공유하기













[t:/] is not "technology - root". dawnsea, rss